﻿#ifndef WAPPLICATION_H
#define WAPPLICATION_H

#include <QObject>
#include <iostream>
using namespace std;
//使用多态变化要用指针，不建议用引用取地址。
/**
 * @brief The WApplication class
 * 设计模式之模板方法
 * 优点:封装不可变部分，扩展可变部分提取公共代码，便于维护，行为由父类控制，子类实现
 * 缺点：抽象类定义了部分抽象方法，由子类实现，
 * 子类的执行结果影响了父类的结果，也就是子类对父类产生了影响，在项目中，会带来代码阅读的难度。
 */
class WApplication
{
public:
    WApplication();
    virtual ~WApplication(){};
    void Run(){
        step1();
        if(step4()){
            step2();
            step3();
            for(int i=0;i<3;i++){
                step5();
            }

        }
    };
protected:
    void step1(){
        cout<<"this is Application step1()"<<endl; //稳定
    };
    void step2(){
        cout<<"this is Application step2()"<<endl;//稳定
    };
    void step3(){
        cout<<"this is Application step3()"<<endl;//稳定
    }
    virtual bool step4()=0;//变化
    virtual void step5()=0;//变化
};

#endif // WAPPLICATION_H
